package edu.eam.vpujpa.entidades;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;

@Entity
@Table(name = "PEDIDOS_VPU")
@NamedQueries({
	@NamedQuery(name=Pedido.BUSCAR_PEDIDOS_BY_VENDEDOR, query="select p from Pedido p where p.vendedor.id =:"+Pedido.PARAMETRO_ID_VENDEDOR ),
})

public class Pedido implements Serializable {

	/**
	 * Default serial version uid
	 */
	private static final long serialVersionUID = 1L;
	public final static String BUSCAR_PEDIDOS_BY_VENDEDOR="Pedido.BuscarPorVendedor";
	public static final String PARAMETRO_ID_VENDEDOR="parametro_id_vendedor";
	
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	@Column(name = "ID")
	private long id;

	@Column(name = "FECHA", nullable = false)
	private Date fecha;

	@Column(name = "VALOR_TOTAL", nullable = false)
	private double valorTotal;

	@ManyToOne(fetch = FetchType.LAZY, optional = false)
	@JoinColumn(name = "ID_VENDEDOR")
	private Vendedor vendedor;

	@ManyToOne(fetch = FetchType.LAZY, optional = false)
	@JoinColumn(name = "ID_MODO_PAGO")
	private ModoPago modoPago;
	
	@ManyToOne(fetch = FetchType.LAZY, optional = true)
	@JoinColumn(name = "ID_PROMOCION")
	private Promocion promocion;
	
	@ManyToOne(fetch = FetchType.LAZY, optional = true)
	@JoinColumn(name = "ID_PAQUETE")
	private Paquete paquete;

	public Pedido() {
		super();
	}

	public Pedido( double valorTotal, Vendedor vendedor, ModoPago modoPago) {
		super();
		this.valorTotal = valorTotal;
		this.vendedor = vendedor;
		this.modoPago = modoPago;
	}

	/**
	 * Este metodo retorna el atributo id de la clase Pedido
	 * 
	 * @return id El atributo id de la clase Pedido que se quiere obtener
	 * 
	 * @author Habib
	 */
	public long getId() {
		return id;
	}

	/**
	 * Este metodo establece el atributo id de la clase Pedido
	 * 
	 * @param id
	 *            El atributo id de la clase Pedido que se quiere establecer
	 * 
	 * @author Habib
	 */
	public void setId(long id) {
		this.id = id;
	}

	/**
	 * Este metodo retorna el atributo fecha de la clase Pedido
	 * 
	 * @return fecha El atributo fecha de la clase Pedido que se quiere obtener
	 * 
	 * @author Habib
	 */
	public Date getFecha() {
		return fecha;
	}

	/**
	 * Este metodo establece el atributo fecha de la clase Pedido
	 * 
	 * @param fecha
	 *            El atributo fecha de la clase Pedido que se quiere establecer
	 * 
	 * @author Habib
	 */
	public void setFecha(Date fecha) {
		this.fecha = fecha;
	}

	/**
	 * Este metodo retorna el atributo valorTotal de la clase Pedido
	 * 
	 * @return valorTotal El atributo valorTotal de la clase Pedido que se
	 *         quiere obtener
	 * 
	 * @author Habib
	 */
	public double getValorTotal() {
		return valorTotal;
	}

	/**
	 * Este metodo establece el atributo valorTotal de la clase Pedido
	 * 
	 * @param valorTotal
	 *            El atributo valorTotal de la clase Pedido que se quiere
	 *            establecer
	 * 
	 * @author Habib
	 */
	public void setValorTotal(double valorTotal) {
		this.valorTotal = valorTotal;
	}


	/**
	 * Este metodo retorna el atributo vendedor de la clase Pedido
	 * 
	 * @return vendedor El atributo vendedor de la clase Pedido que se quiere
	 *         obtener
	 * 
	 * @author Habib
	 */
	public Vendedor getVendedor() {
		return vendedor;
	}

	/**
	 * Este metodo establece el atributo vendedor de la clase Pedido
	 * 
	 * @param vendedor
	 *            El atributo vendedor de la clase Pedido que se quiere
	 *            establecer
	 * 
	 * @author Habib
	 */
	public void setVendedor(Vendedor vendedor) {
		this.vendedor = vendedor;
	}

	/**
	 * Este metodo retorna el atributo modoPago de la clase Pedido
	 * 
	 * @return modoPago El atributo modoPago de la clase Pedido que se quiere
	 *         obtener
	 * 
	 * @author Habib
	 */
	public ModoPago getModoPago() {
		return modoPago;
	}

	/**
	 * Este metodo establece el atributo modoPago de la clase Pedido
	 * 
	 * @param modoPago
	 *            El atributo modoPago de la clase Pedido que se quiere
	 *            establecer
	 * 
	 * @author Habib
	 */
	public void setModoPago(ModoPago modoPago) {
		this.modoPago = modoPago;
	}

	public Promocion getPromocion() {
		return promocion;
	}

	public void setPromocion(Promocion promocion) {
		this.promocion = promocion;
	}

	public Paquete getPaquete() {
		return paquete;
	}

	public void setPaquete(Paquete paquete) {
		this.paquete = paquete;
	}
	
	
}
